package com.funlog.designpattern.templatemethod.test2;

/**
 * 定义抽象类
 * 下班跑路为demo
 * 下班的基本步骤是：1.下班，2.坐车（有班车，公交车），3.到家
 */
public abstract class MyAbstractClass {
    //模板方法(定义基本方法的执行顺序)
    public final void comeHomeFromWork() {
        offDuty();
        if(isCar()){
            car();
        }
        getOff();
    }

    //钩子方法,是否需要坐车（默认返回true:需要坐车）
    public boolean isCar() {
        return true;
    }

    //下面的方法都称为基本方法
    //1.下班
    private void offDuty() {
        System.out.println("到点下班了");
    }

    //2.坐车（有的员工坐班车，有的坐公交车回家，需要子类实现的方法）
    abstract void car();

    //3.到家了
    private void getOff() {
        System.out.println("到家了");
    }
}
